﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLVatTu.Class;
using QLVatTu.InPhieu;

namespace QLVatTu.NghiepVu
{
    public partial class frmQuanLyPhieuDeNghiCapVatTu : Form
    {
        KetNoiDB cn = new KetNoiDB();

        public frmQuanLyPhieuDeNghiCapVatTu()
        {
            InitializeComponent();
        }

        private void loadData()
        {
            cbbDonViSanXuat.DataSource = cn.getTable("SELECT [MaDoiTac],[TenDoiTac] FROM [tbl_DoiTac] WHERE [DonViSanXuat] = 1");
            cbbDonViSanXuat.DisplayMember = "TenDoiTac";
            cbbDonViSanXuat.ValueMember = "MaDoiTac";

            cbbCongTrinhDuAn.DataSource = cn.getTable("SELECT [MaCongTrinhDuAn],[TenCongTrinhDuAn] FROM [tbl_CongTrinhDuAn]");
            cbbCongTrinhDuAn.DisplayMember = "TenCongTrinhDuAn";
            cbbCongTrinhDuAn.ValueMember = "MaCongTrinhDuAn";

            cbbTrangThai.DataSource = cn.CreateTrangThai();
            cbbTrangThai.DisplayMember = "TenTrangThai";
            cbbTrangThai.ValueMember = "TrangThai";

            load_PhieuDeNghiCap();
        }

        private void load_PhieuDeNghiCap(string dieuKien = null)
        {
            string sql = "";
            if (dieuKien != null)
            {
                sql = @"
                    SELECT    ROW_NUMBER() over(order by dbo.tbl_PhieuDeNghiCap.SoPhieu) as STT,dbo.tbl_PhieuDeNghiCap.SoPhieu, dbo.tbl_DoiTac.TenDoiTac as DonViSanXuat,dbo.tbl_CongTrinhDuAn.TenCongTrinhDuAn as CongTrinhDuAn, dbo.tbl_PhieuDeNghiCap.NgayYeuCau, dbo.tbl_PhieuDeNghiCap.TrangThai
                    FROM         dbo.tbl_PhieuDeNghiCap INNER JOIN
                                          dbo.tbl_DoiTac ON dbo.tbl_PhieuDeNghiCap.MaDonViSanXuat = dbo.tbl_DoiTac.MaDoiTac INNER JOIN
                                          dbo.tbl_CongTrinhDuAn ON dbo.tbl_PhieuDeNghiCap.MaCongTrinhDuAn = dbo.tbl_CongTrinhDuAn.MaCongTrinhDuAn
                    " + dieuKien;
            }
            else
            {
                sql = @"
                    SELECT    ROW_NUMBER() over(order by dbo.tbl_PhieuDeNghiCap.SoPhieu) as STT,dbo.tbl_PhieuDeNghiCap.SoPhieu, dbo.tbl_DoiTac.TenDoiTac as DonViSanXuat,dbo.tbl_CongTrinhDuAn.TenCongTrinhDuAn as CongTrinhDuAn, dbo.tbl_PhieuDeNghiCap.NgayYeuCau, dbo.tbl_PhieuDeNghiCap.TrangThai
                    FROM         dbo.tbl_PhieuDeNghiCap INNER JOIN
                                          dbo.tbl_DoiTac ON dbo.tbl_PhieuDeNghiCap.MaDonViSanXuat = dbo.tbl_DoiTac.MaDoiTac INNER JOIN
                                          dbo.tbl_CongTrinhDuAn ON dbo.tbl_PhieuDeNghiCap.MaCongTrinhDuAn = dbo.tbl_CongTrinhDuAn.MaCongTrinhDuAn
                ";
            }
            dtgPhieuDeNghi.Rows.Clear();
            DataTable dt = cn.getTable(sql);
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    DataGridViewRow dtgRow = (DataGridViewRow)dtgPhieuDeNghi.Rows[0].Clone();
                    dtgRow.Cells[0].Value = dr["STT"].ToString();
                    dtgRow.Cells[1].Value = dr["SoPhieu"].ToString();
                    dtgRow.Cells[2].Value = dr["DonViSanXuat"].ToString();
                    dtgRow.Cells[3].Value = dr["CongTrinhDuAn"].ToString();
                    dtgRow.Cells[4].Value =DateTime.Parse(dr["NgayYeuCau"].ToString());
                    bool TrangThai = bool.Parse(dr["TrangThai"].ToString());
                    if (TrangThai == true)
                    {
                        dtgRow.Cells[5].Value = "Đã phê duyệt";
                    }
                    else
                    {
                        dtgRow.Cells[5].Value = "Chưa phê duyệt";
                    }
                    dtgPhieuDeNghi.Rows.Add(dtgRow);
                }
            }
        }

        private void frmQuanLyPhieuDeNghiCapVatTu_Load(object sender, EventArgs e)
        {
            if (cn.KetNoi())
            {
                loadData();
            }
            else
            {
                MessageBox.Show("Kết nối CSDL thất bại!");
                this.Close();
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            frmPhieuDeNghiCapVatTu frm = new frmPhieuDeNghiCapVatTu();
            frm.ShowDialog();
            load_PhieuDeNghiCap();
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (dtgPhieuDeNghi.SelectedRows.Count > 0 && dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value != null)
            {
                bool TrangThai = bool.Parse(cn.LayDuLieu("SELECT [TrangThai] FROM [tbl_PhieuDeNghiCap] WHERE [SoPhieu] = '" + dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString() + "'"));
                if (TrangThai == true)
                {
                    MessageBox.Show("Bạn không thể sửa phiếu đề nghị đã được ký duyệt!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                frmPhieuDeNghiCapVatTu frm = new frmPhieuDeNghiCapVatTu();
                frm.SoPhieuCapNhat = dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString();
                frm.ShowDialog();
                load_PhieuDeNghiCap();
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (dtgPhieuDeNghi.SelectedRows.Count > 0 && dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value != null)
            {
                string SoPhieu = dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString();
                bool TrangThai = bool.Parse(cn.LayDuLieu("SELECT [TrangThai] FROM [tbl_PhieuDeNghiCap] WHERE [SoPhieu] = '" + SoPhieu + "'"));
                if (TrangThai == true)
                {
                    MessageBox.Show("Bạn không thể xóa phiếu đề nghị đã được ký duyệt!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                DialogResult msg = MessageBox.Show("Bạn chắc chắn muốn xóa?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (msg == DialogResult.Yes)
                {
                    cn.Delete_Table("tbl_ChiTietPhieuDeNghiCap", "SoPhieu ='" + SoPhieu + "'");
                    cn.Delete_Table("tbl_PhieuDeNghiCap", "SoPhieu ='" + SoPhieu + "'");
                    MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Xóa phiếu đề nghị cấp vật tư.");
                    load_PhieuDeNghiCap();
                }
            }
        }

        private void btnInPhieu_Click(object sender, EventArgs e)
        {
            frmInPhieuDeNghiCapVatTu frm = new frmInPhieuDeNghiCapVatTu();
            if (dtgPhieuDeNghi.SelectedRows.Count > 0 && dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value != null)
            {
                string SoPhieu = dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString();
                string sql;
                sql = @"
                    SELECT     dbo.tbl_PhieuDeNghiCap.SoPhieu, dbo.tbl_DoiTac.TenDoiTac as DonViSanXuat, dbo.tbl_CongTrinhDuAn.TenCongTrinhDuAn as CongTrinhDuAn, dbo.tbl_PhieuDeNghiCap.NgayYeuCau
                    FROM         dbo.tbl_PhieuDeNghiCap INNER JOIN
                                          dbo.tbl_DoiTac ON dbo.tbl_PhieuDeNghiCap.MaDonViSanXuat = dbo.tbl_DoiTac.MaDoiTac INNER JOIN
                                          dbo.tbl_CongTrinhDuAn ON dbo.tbl_PhieuDeNghiCap.MaCongTrinhDuAn = dbo.tbl_CongTrinhDuAn.MaCongTrinhDuAn
                    WHERE  dbo.tbl_PhieuDeNghiCap.SoPhieu = '" + SoPhieu + "'";
                DataTable dt = cn.getTable(sql);
                if (dt.Rows.Count > 0)
                {
                    List<PhieuDeNghiCapVatTu> list = new List<PhieuDeNghiCapVatTu>();
                    string DonViSanXuat = dt.Rows[0]["DonViSanXuat"].ToString();
                    string CongTrinhDuAn = dt.Rows[0]["CongTrinhDuAn"].ToString();
                    string NgayYeuCau = DateTime.Parse(dt.Rows[0]["NgayYeuCau"].ToString()).Date.ToString("dd/MM/yyyy");

                    sql = @"
                        SELECT     dbo.tbl_VatTu.TenVatTu, dbo.tbl_ChiTietPhieuDeNghiCap.MaVatTu, dbo.tbl_DonViTinh.TenDonViTinh as DonViTinh, dbo.tbl_ChiTietPhieuDeNghiCap.SoLuong
                        FROM         dbo.tbl_ChiTietPhieuDeNghiCap INNER JOIN
                                              dbo.tbl_VatTu ON dbo.tbl_ChiTietPhieuDeNghiCap.MaVatTu = dbo.tbl_VatTu.MaVatTu INNER JOIN
                                              dbo.tbl_DonViTinh ON dbo.tbl_ChiTietPhieuDeNghiCap.MaDonViTinh = dbo.tbl_DonViTinh.MaDonViTinh
                        WHERE dbo.tbl_ChiTietPhieuDeNghiCap.SoPhieu = '" + SoPhieu + "'";
                    DataTable dataChiTiet = cn.getTable(sql);
                    if (dataChiTiet.Rows.Count > 0)
                    {
                        int stt = 0;
                        foreach (DataRow dr in dataChiTiet.Rows)
                        {
                            stt++;
                            PhieuDeNghiCapVatTu phieu = new PhieuDeNghiCapVatTu();
                            phieu.DonViSanXuat = DonViSanXuat;
                            phieu.CongTrinhDuAn = CongTrinhDuAn;
                            phieu.NgayYeuCau = NgayYeuCau;
                            phieu.STT = stt.ToString();
                            phieu.TenVatTu = dr["TenVatTu"].ToString();
                            phieu.MaVatTu = dr["MaVatTu"].ToString();
                            phieu.DonViTinh = dr["DonViTinh"].ToString();
                            phieu.SoLuong = dr["SoLuong"].ToString();
                            list.Add(phieu);
                        }
                    }
                    frm.PhieuDeNghiCapVatTuBindingSource.DataSource = list;

                }
            }
            frm.ShowDialog();
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            if (this.TopLevel == false) this.Parent.Parent.Controls.Remove(this.Parent);
            else this.Close();
        }

        private void dtgPhieuDeNghi_SelectionChanged(object sender, EventArgs e)
        {
            if (dtgPhieuDeNghi.SelectedRows.Count > 0 && dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value != null)
            {
                //Thay đổi nút duyệt
                string sql = "";
                if (dtgPhieuDeNghi.CurrentRow.Cells["TrangThai"].Value.ToString() == "Đã phê duyệt")
                {
                    btnDuyet.Text = "Hủy duyệt";
                }
                else
                {
                    btnDuyet.Text = "Phê duyệt";
                }

                sql = @"
                        SELECT     ROW_NUMBER() over(order by dbo.tbl_ChiTietPhieuDeNghiCap.SoPhieu) as STT, dbo.tbl_VatTu.TenVatTu, dbo.tbl_DonViTinh.TenDonViTinh as DonViTinh, dbo.tbl_ChiTietPhieuDeNghiCap.SoLuong as SoLuongYeuCau,tbl_ChiTietPhieuDeNghiCap.MaVatTu
                        FROM         dbo.tbl_ChiTietPhieuDeNghiCap INNER JOIN
                                              dbo.tbl_DonViTinh ON dbo.tbl_ChiTietPhieuDeNghiCap.MaDonViTinh = dbo.tbl_DonViTinh.MaDonViTinh INNER JOIN
                                              dbo.tbl_VatTu ON dbo.tbl_ChiTietPhieuDeNghiCap.MaVatTu = dbo.tbl_VatTu.MaVatTu INNER JOIN
                                              dbo.tbl_PhieuDeNghiCap ON dbo.tbl_ChiTietPhieuDeNghiCap.SoPhieu = dbo.tbl_PhieuDeNghiCap.SoPhieu
                        WHERE  dbo.tbl_PhieuDeNghiCap.SoPhieu = '" + dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString() + "'";
                DataTable dt = cn.getTable(sql);
                dtgChiTiet.Rows.Clear();
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        DataGridViewRow dtgRow = (DataGridViewRow)dtgChiTiet.Rows[0].Clone();
                        dtgRow.Cells[0].Value = dr["STT"].ToString();
                        dtgRow.Cells[1].Value = dr["TenVatTu"].ToString();
                        dtgRow.Cells[2].Value = dr["DonViTinh"].ToString();
                        dtgRow.Cells[3].Value = dr["SoLuongYeuCau"].ToString();
                        float SoLuongDaCap = 0;
                        sql = @"
                            SELECT	dbo.tbl_ChiTietPhieuXuat.MaVatTu, SUM(dbo.tbl_ChiTietPhieuXuat.SoLuong) as SoLuongDaCap
                            FROM         dbo.tbl_PhieuXuatKho INNER JOIN
                                                  dbo.tbl_ChiTietPhieuXuat ON dbo.tbl_PhieuXuatKho.SoPhieu = dbo.tbl_ChiTietPhieuXuat.SoPhieu
                            WHERE dbo.tbl_PhieuXuatKho.MaPhieuDeNghi='" + dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString() + "' AND dbo.tbl_ChiTietPhieuXuat.MaVatTu ='" + dr["MaVatTu"].ToString() + @"'
                            GROUP BY dbo.tbl_ChiTietPhieuXuat.MaVatTu
                        ";
                        DataTable dtSoLuong = cn.getTable(sql);
                        if (dtSoLuong.Rows.Count == 1)
                        {
                            SoLuongDaCap = Int32.Parse(dtSoLuong.Rows[0]["SoLuongDaCap"].ToString());
                        }
                        dtgRow.Cells[4].Value = SoLuongDaCap;
                        dtgChiTiet.Rows.Add(dtgRow);
                    }
                }
            }
            else
            {
                dtgChiTiet.Rows.Clear();
            }
        }

        private string XacDinhDieuKienLoc()
        {
            string dieuKienLoc = "WHERE 1=1";
            if (ckbSoPhieu.Checked == true && txtSoPhieu.Text.Trim() != "")
            {
                dieuKienLoc += " AND dbo.tbl_PhieuDeNghiCap.SoPhieu LIKE '%" + txtSoPhieu.Text.Trim() + "%'";
            }

            if (ckbDonViSanXuat.Checked == true && cbbDonViSanXuat.Items.Count > 0)
            {
                dieuKienLoc += " AND dbo.tbl_PhieuDeNghiCap.MaDonViSanXuat = '" + cbbDonViSanXuat.SelectedValue.ToString() + "'";
            }

            if (ckbCongTrinhDuAn.Checked == true && cbbCongTrinhDuAn.Items.Count > 0)
            {
                dieuKienLoc += " AND dbo.tbl_PhieuDeNghiCap.MaCongTrinhDuAn = '" + cbbCongTrinhDuAn.SelectedValue.ToString() + "'";
            }

            if (ckbTimTheoNgay.Checked == true)
            {
                dieuKienLoc += " AND dbo.tbl_PhieuDeNghiCap.NgayYeuCau BETWEEN '" + dtipTuNgay.Value.ToString("yyyy-MM-dd") + "' AND '" + dtipDenNgay.Value.ToString("yyyy-MM-dd") + "'";
            }

            if (ckbTrangThai.Checked == true)
            {
                dieuKienLoc += "and tbl_PhieuDeNghiCap.TrangThai='" + cbbTrangThai.SelectedValue.ToString() + "'";
            }

            return dieuKienLoc;
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            load_PhieuDeNghiCap(XacDinhDieuKienLoc());
        }

        private void ckbSoPhieu_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbSoPhieu.Checked == true)
            {
                txtSoPhieu.Text = "";
            }
            else
            {
                txtSoPhieu.Text = "Tìm theo mã phiếu";
            }
            txtSoPhieu.Enabled = ckbSoPhieu.Checked;
        }

        private void ckbDonViSanXuat_CheckedChanged(object sender, EventArgs e)
        {
            cbbDonViSanXuat.Enabled = ckbDonViSanXuat.Checked;
        }

        private void ckbCongTrinhDuAn_CheckedChanged(object sender, EventArgs e)
        {
            cbbCongTrinhDuAn.Enabled = ckbCongTrinhDuAn.Checked;
        }

        private void btnDuyet_Click(object sender, EventArgs e)
        {
            if (btnDuyet.Text == "Phê duyệt" && dtgPhieuDeNghi.SelectedRows.Count > 0 && dtgPhieuDeNghi.CurrentRow.Cells["TrangThai"].Value.ToString() == "Chưa phê duyệt")
            {
                DialogResult msg = MessageBox.Show("Bạn có chắc chắn muốn phê duyệt phiếu?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                {
                    if (msg == DialogResult.Yes)
                    {
                        byte TrangThai = 1;
                        cn.Update_Table("tbl_PhieuDeNghiCap", "TrangThai='" + TrangThai + "'", "SoPhieu='" + dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString() + "'");
                    }
                }
            }
            if (btnDuyet.Text == "Hủy duyệt" && dtgPhieuDeNghi.SelectedRows.Count > 0 && dtgPhieuDeNghi.CurrentRow.Cells["TrangThai"].Value.ToString() == "Đã phê duyệt")
            {
                DialogResult msg = MessageBox.Show("Bạn có chắc chắn muốn hủy phê duyệt phiếu?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                {
                    if (msg == DialogResult.Yes)
                    {
                        string SoPhieu = cn.LayDuLieu("select MaPhieuDeNghi from tbl_PhieuXuatKho where MaPhieuDeNghi='" + dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString() + "'");
                        if (SoPhieu != "")
                        {
                            MessageBox.Show("Đã lập phiếu xuất. Không thể hủy duyệt.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        byte TrangThai = 0;
                        cn.Update_Table("tbl_PhieuDeNghiCap", "TrangThai='" + TrangThai + "'", "SoPhieu='" + dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString() + "'");
                    }
                }
            }
            load_PhieuDeNghiCap();
        }

        private void btnPhieuYeuCauNhap_Click(object sender, EventArgs e)
        {
            if (dtgPhieuDeNghi.SelectedRows.Count > 0)
            {
                if (dtgPhieuDeNghi.CurrentRow.Cells["TrangThai"].Value.ToString() == "Chưa phê duyệt")
                {
                    MessageBox.Show("Phiếu đề nghị cấp chưa được phê duyệt.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                else
                {
                        frmThemPhieuXuatCongTrinhDuAn frm = new frmThemPhieuXuatCongTrinhDuAn();
                        frm.PhieuDeNghiCap = dtgPhieuDeNghi.CurrentRow.Cells["SoPhieu"].Value.ToString();
                        frm.ShowDialog();
                }
            }
            else
            {
                MessageBox.Show("Chưa chọn phiếu đề nghị cấp.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }

        private void ckbTimTheoNgay_CheckedChanged(object sender, EventArgs e)
        {
            dtipTuNgay.Enabled = ckbTimTheoNgay.Checked;
            dtipDenNgay.Enabled = ckbTimTheoNgay.Checked;
        }

        private void ckbTrangThai_CheckedChanged(object sender, EventArgs e)
        {
            cbbTrangThai.Enabled = ckbTrangThai.Checked;
        }

        private void radLoad_CheckedChanged(object sender, EventArgs e)
        {
            if (radLoad.Checked == true)
            {
                radLoad.Checked = false;
                load_PhieuDeNghiCap();
                ckbSoPhieu.Checked = false;
                ckbTimTheoNgay.Checked = false;
                ckbDonViSanXuat.Checked = false;
                ckbTrangThai.Checked = false;
                ckbCongTrinhDuAn.Checked = false;
            }
        }
    }
}
